# 加载 ggplot2 包，用于数据可视化绘图等相关操作
library("ggplot2")

# 定义一个名为 roll 的函数，模拟掷一个骰子并返回结果
# 下面这个函数内部实现的功能是从1到6的数字中随机抽取一个（模拟掷一个骰子），并返回该数字作为结果
roll <-function(){
  # 创建一个包含1到6的向量，代表骰子的六个面的点数
  die <- 1:6
  # 从 die 向量中随机抽取一个元素（size = 1表示抽取一个），允许重复抽取（replace = TRUE），每个元素被抽取到的概率相等（均为1/6）
  dice <- sample(die,size=1,replace =TRUE,prob=c(1/6,1/6,1/6,1/6,1/6,1/6))
  # 返回抽取到的骰子点数（这里直接返回抽取到的元素，虽然外面套了个 sum，但因为只抽取了一个元素，sum 操作在这里实际就是返回这个元素本身）
  sum(dice)
}
# 使用 replicate 函数重复调用 roll 函数100次，将每次的结果存储在 rolls 向量中，模拟掷一个骰子100次的结果
rolls <-replicate(100,roll())
# 使用 qplot 函数绘制直方图，展示 rolls 向量中的数据分布情况，binwidth = 1 表示直方图每个柱子的宽度为1
qplot(rolls,binwidth=1)

# 以下又是重新定义了一个名为 roll 的函数，和上面第一个 roll 函数同名，会覆盖前面的定义
# 同样是模拟掷骰子相关操作，但这里每次掷两个骰子（size = 2）并返回点数之和，每个骰子各面出现概率相等
roll <-function(){
  die <- 1:6
  dice <- sample(die,size=2,replace =TRUE,prob=c(1/6,1/6,1/6,1/6,1/6,1/6))
  sum(dice)
}
# 重复调用这个新的 roll 函数100次，存储结果到 rolls 向量中，模拟掷两个骰子（各面等概率）100次的结果
rolls <-replicate(100,roll())
# 绘制直方图展示这次的 rolls 向量中的数据分布，柱子宽度为1
qplot(rolls,binwidth=1)

# 再次重新定义 roll 函数，这次也是模拟掷两个骰子
roll <-function(){
  die <- 1:6
  # 这里改变了骰子各面出现的概率，与之前等概率情况不同了，最后一个面出现概率为3/8，其他面为1/8
  dice <- sample(die,size=2,replace =TRUE,prob=c(1/8,1/8,1/8,1/8,1/8,3/8))
  sum(dice)
}
# 重复调用这个 roll 函数10000次，得到大量模拟结果存储在 rolls 向量中，模拟按照新概率掷两个骰子10000次的结果
rolls <-replicate(10000,roll())
# 绘制直方图展示这10000次模拟结果的数据分布，柱子宽度设为1
qplot(rolls,binwidth=1)
